Node.js এবং JavaScript-এ Synchronous এবং Asynchronous কোড ব্যবহৃত হয় বিভিন্ন ধরনের কার্যক্রম সম্পন্ন করার জন্য। এর মধ্যে, Synchronous কোডের ভুল এবং Asynchronous কোডের ভুলের (Error Handling) পদ্ধতি কিছুটা ভিন্ন।
১. Synchronous Errors
Synchronous (সিনক্রোনাস) কোড এমন কোড যা একের পর এক, লাইনে লাইনে সম্পন্ন হয়। সেগুলি একটি নির্দিষ্ট অর্ডারে একে অপরের পর পর চালানো হয়। এই কোডে যদি কোন ত্রুটি ঘটে, তবে সেটা সরাসরি ওই লাইনেই ঘটবে এবং পুরো প্রোগ্রাম থেমে যাবে যতক্ষণ না ত্রুটি সঠিকভাবে হ্যান্ডেল করা না হয়।
Synchronous Error Handling
Synchronous কনটেক্সটে ত্রুটি হ্যান্ডলিং সাধারণত try-catch ব্লকের মাধ্যমে করা হয়। যখন কোডের মধ্যে কোন ত্রুটি ঘটে, তখন সিস্টেম একে থামিয়ে দেয় এবং ত্রুটির বার্তা প্রদর্শন করে।
উদাহরণ:
try {
// Synchronous error
let result = 10 / 0; // এখানে কোনো ডিভিশন বাই জিরো হয়নি, এটি কোনো ত্রুটি হবে না
console.log(result);
// এখানে একটি ভুল করে দেখানো
let error = undefinedVar; // এটি একটি ReferenceError, কারণ undefinedVar সংজ্ঞায়িত হয়নি
} catch (error) {
console.log('Error caught:', error.message); // ত্রুটির বার্তা দেখাবে
}Output:
Error caught: undefinedVar is not definedএখানে, try-catch ব্লক ব্যবহার করা হয়েছে যেখানে প্রথম অংশে undefinedVar এর কারণে ReferenceError তৈরি হচ্ছে, যা পরে catch ব্লকের মাধ্যমে ধরতে পারা যাচ্ছে।
২. Asynchronous Errors
Asynchronous (অ্যাসিনক্রোনাস) কোড এমন কোড যা একসাথে চলতে পারে এবং একটি কার্যক্রম চলাকালীন অন্য কার্যক্রম সম্পাদিত হতে পারে। Node.js এ সাধারণত I/O অপারেশন, ফাইল হ্যান্ডলিং, HTTP রিকোয়েস্ট, এবং ডেটাবেস কুয়েরি অ্যাসিনক্রোনাসভাবে কাজ করে।
Asynchronous কোডে, যখন কোন ত্রুটি ঘটে, তখন সেটি সরাসরি callback function বা promise এর মাধ্যমে ধরা হয়। অ্যাসিনক্রোনাস ত্রুটি সাধারণত callback functions বা Promises এবং async/await স্টাইল ব্যবহার করে হ্যান্ডেল করা হয়।
Callback-based Error Handling
এখানে, callback-based ত্রুটি হ্যান্ডলিং দেখানো হয়েছে। যদি অ্যাসিনক্রোনাস ফাংশনে কোন ত্রুটি ঘটে, তবে সেটা সাধারণত কলব্যাক ফাংশনের মাধ্যমে রিটার্ন হয়।
const fs = require('fs');
// ফাইল পড়ার অ্যাসিনক্রোনাস অপারেশন
fs.readFile('nonexistentfile.txt', 'utf8', (err, data) => {
if (err) {
console.log('Error:', err.message); // এখানে ফাইল না থাকায় ত্রুটি হবে
} else {
console.log('File data:', data);
}
});Output:
Error: ENOENT: no such file or directory, open 'nonexistentfile.txt'এখানে, fs.readFile() ফাংশনটি একটি callback নেয় যা প্রথম প্যারামিটার হিসেবে err গ্রহণ করে। যদি ফাইল পাওয়া না যায়, তবে ত্রুটির বার্তা err.message দিয়ে আউটপুট প্রদর্শিত হবে।
Promise-based Error Handling
Promises ব্যবহৃত হলে, অ্যাসিনক্রোনাস কার্যক্রমের ত্রুটি .catch() ব্লকের মাধ্যমে হ্যান্ডেল করা হয়।
const fs = require('fs').promises;
// ফাইল পড়ার অ্যাসিনক্রোনাস অপারেশন
fs.readFile('nonexistentfile.txt', 'utf8')
.then(data => {
console.log('File data:', data);
})
.catch(err => {
console.log('Error:', err.message); // এখানে ফাইল না থাকায় ত্রুটি হবে
});Output:
Error: ENOENT: no such file or directory, open 'nonexistentfile.txt'এখানে, .then() ব্লক ডেটা পাওয়া গেলে কার্যকর হবে, এবং .catch() ব্লক ত্রুটি হলে কার্যকর হবে।
Async/Await Error Handling
Async/Await ব্যবহৃত হলে, try-catch ব্লক ব্যবহার করা হয় ত্রুটি হ্যান্ডলিংয়ের জন্য। এতে কোডটি সিঙ্ক্রোনাস স্টাইলে লেখা হয়, কিন্তু এটি অ্যাসিনক্রোনাস কার্যক্রম পরিচালনা করে।
const fs = require('fs').promises;
async function readFile() {
try {
const data = await fs.readFile('nonexistentfile.txt', 'utf8');
console.log('File data:', data);
} catch (err) {
console.log('Error:', err.message); // এখানে ফাইল না থাকায় ত্রুটি হবে
}
}
readFile();Output:
Error: ENOENT: no such file or directory, open 'nonexistentfile.txt'এখানে, await ব্যবহার করে ফাইল পড়ার কার্যক্রম পরিচালনা করা হয়েছে এবং try-catch ব্লক ব্যবহার করে ত্রুটিটি হ্যান্ডেল করা হয়েছে।
সারাংশ
| Type | Error Handling | Example |
|---|---|---|
| Synchronous | try-catch ব্লক ব্যবহার করে। ত্রুটি ঘটলে পুরো কোড থেমে যায়। | try { let a = undefinedVar; } catch (error) { console.log(error.message); } |
| Asynchronous | Callbacks, Promises, Async/Await ব্যবহার করে। ত্রুটি সাধারণত কলব্যাক বা catch ব্লকের মাধ্যমে হ্যান্ডেল করা হয়। | fs.readFile('nonexistentfile.txt', (err, data) => { if (err) { console.log(err.message); } }); |
- Synchronous errors সাধারণত
try-catchব্লক দ্বারা হ্যান্ডেল করা হয় এবং ত্রুটি ঘটলে প্রোগ্রাম থেমে যায়। - Asynchronous errors সাধারণত callback functions, Promises, অথবা async/await ব্যবহার করে হ্যান্ডেল করা হয়, যেখানে ত্রুটি callback বা catch ব্লক এর মাধ্যমে ধরা হয়।
Node.js-এ অ্যাসিনক্রোনাস কার্যক্রম পরিচালনার সময় ত্রুটি হ্যান্ডলিং খুবই গুরুত্বপূর্ণ, এবং সঠিকভাবে ত্রুটি পরিচালনা করা সিস্টেমের স্থিতিশীলতা ও নির্ভরযোগ্যতা নিশ্চিত করে।
Read more